package cn.cxq.learning.recursion;

import org.junit.jupiter.api.Test;

/**
 * 剑指offer
 * 数值的整数次方 相似的企业真题
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 64M，其他语言128M 热度指数：761656
 * 本题知识点： 数学
 * 算法知识视频讲解
 * 题目描述
 * 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 * <p>
 * 保证base和exponent不同时为0。不得使用库函数，同时不需要考虑大数问题，也不用考虑小数点后面0的位数。
 * <p>
 * 示例1
 * 输入
 * 复制
 * 2.00000,3
 * 返回值
 * 复制
 * 8.00000
 * 示例2
 * 输入
 * 复制
 * 2.10000,3
 * 返回值
 * 复制
 * 9.26100
 * 示例3
 * 输入
 * 复制
 * 2.00000,-2
 * 返回值
 * 复制
 * 0.25000
 * 说明
 * 2的-2次方等于1/4=0.25
 */
public class DoublePower {

    @Test
    public void testPower(){
        System.out.println(Power(2,-2));
        System.out.println(Power(-2,-3));
        System.out.println(Power(0,-2));
        System.out.println(Power(2,2));
    }

    //思路：简单递归。
    public double Power(double base, int exponent) {
        if (base == 0) {
            return 0;
        } else {
            if (exponent == 0) {
                return 1;
            } else if (exponent > 0) {
                return base * Power(base, exponent - 1);
            } else {
                return 1 / base * Power(base, exponent + 1);
            }
        }
    }
}
